/**
 * @author attilax 老哇的爪子
	@since  2014年5月11日 下午5:10:51$
	
	com.attilax.qrcode.qrcodex
 */
package com.attilax.qrcode;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import com.attilax.util.tryX;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

/**
 * @author attilax 老哇的爪子
 * @since 2014年5月11日 下午5:10:51$
 */
public class qrcodeUtilV2t66 {

	/**
	 * @author attilax 老哇的爪子
	 * @since 2014年5月11日 下午5:10:51$
	 * 
	 */
	public qrcodeUtilV2t66() {
		// TODO Auto-generated constructor stub
	}

	// attilax 老哇的爪子 下午5:10:51 2014年5月11日

	/**
	 * @author attilax 老哇的爪子
	 * @since 2014年5月11日 下午5:10:51$
	 * 
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// attilax 老哇的爪子 下午5:10:51 2014年5月11日
		// gene("aa","100","100","c:\\qrcode.png");

		final String content = "attilax艾提拉的测试";
		final String path = "C:/餐巾纸.jpg";

		final int width = 400;
		final int height = 401;

		gene(content, path, width, height);
		
	//	gene(content, path, width, height);
		
		geneBarcode("1234567890123",50,300,"c:/bar.jpg");

		System.out.println("ok");
	}
	
	
	public static String decode(String imagePath) {
		String contents = null;

		MultiFormatReader formatReader = new MultiFormatReader();

		BufferedImage image;
		try {
			image = ImageIO.read(new File(imagePath));

			// 将图像数据转换为1 bit data
			LuminanceSource source = new BufferedImageLuminanceSource(image);
			Binarizer binarizer = new HybridBinarizer(source);
			// BinaryBitmap是ZXing用来表示1 bit data位图的类，Reader对象将对它进行解析
			BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

			Map hints = new HashMap();
			hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");

			// 对图像进行解码
			Result result = formatReader.decode(binaryBitmap, hints);
			contents = result.toString();

			System.out.println("barcode encoding format :\t " + result.getBarcodeFormat());
		} catch (IOException e) {
			 
		} catch (NotFoundException e) {
			e.printStackTrace();
		}

		return contents;

	/**
	 * 
	 * @author attilax 老哇的爪子
	 * @since 2014年5月11日 下午5:35:54$
	 * 
	 * @param content
	 * @param path
	 * @param width
	 * @param height
	 * @throws IOException
	 * @throws WriterException
	 */
	public static void gene(final String content, final String path, final int width, final int height)
			throws IOException, WriterException {

		// attilax 老哇的爪子 下午5:23:26 2014年5月11日
		MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
		Map hints = new HashMap();
		hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
		// BitMatrix bitMatrix = multiFormatWriter.encode(content,
		// BarcodeFormat.QR_CODE, width, height,hints);
		BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, width, height);
		File file1 = new File(path);
		MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);
		return;

	}
	// public static void gene(final String content, final String path,
	// final int width, final int height) {
	// new tryX<Object>() {
	//
	// @Override
	// public Object item(Object t) throws Exception {
	// // attilax 老哇的爪子 下午5:23:26 2014年5月11日
	// MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
	//
	// Map hints = new HashMap();
	// hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
	//
	// BitMatrix bitMatrix = multiFormatWriter.encode(content,
	// BarcodeFormat.QR_CODE, width, height,hints);
	// File file1 = new File(path );
	// MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);
	// return null;
	// }
	// }.$("");
	// }

	@Deprecated
	private static void gene(String code, String strHeight, String strWidth, String file) throws Exception {
		// OutputStream out
		OutputStream output = new FileOutputStream(new File(file));

		if (strHeight != null && !"".equals(strHeight) && strWidth != null && !"".equals(strWidth)) {
			BarCodeUtil.makeBarCoder(code, Integer.parseInt(strHeight), Integer.parseInt(strWidth), output);
		} else {
			BarCodeUtil.makeBarCoder(code, output);
		}

		output.flush();
		output.close();

	}
	
	private static void geneBarcode(String code, int strHeight, int strWidth, String file) throws Exception {
		// OutputStream out
		OutputStream output = new FileOutputStream(new File(file));

	//	if (strHeight != null && !"".equals(strHeight) && strWidth != null && !"".equals(strWidth)) {
			BarCodeUtil.makeBarCoder(code,  (strHeight),  (strWidth), output);
//		} else {
//			BarCodeUtil.makeBarCoder(code, output);
//		}

		output.flush();
		output.close();

	}

}

// attilax 老哇的爪子